import os
from building import *
from gcc import GetGCCLikePLATFORM
import rtconfig

cwd = GetCurrentDir()
group = []

CXXFLAGS = ''
LOCAL_CCFLAGS = ''
LOCAL_CFLAGS = ''
LOCAL_CXXFLAGS = ''
core_cflags = ''
core_cxxflags = ''

if rtconfig.PLATFORM in GetGCCLikePLATFORM():
    CXXFLAGS += ' -fno-exceptions -fno-rtti -ffunction-sections -fdata-sections -Wl,--gc-sections' # reduce resource consumption
    LOCAL_CFLAGS += ' -std=gnu99' # enable GNU extension. Cannot use -std=c99, some toolchain like RISC-V GCC doesn't support 'asm' key word
    LOCAL_CXXFLAGS += ' -std=c++11' # support C++11, like non-static data member initializers
    # strict code checking
    # core_cflags += ' -Wno-unused-function -Wno-unused-variable -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-label -Wno-unused-value -Wno-unused-result'
    # core_cxxflags += ' -Wno-unused-function -Wno-unused-variable -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-label -Wno-unused-value -Wno-unused-result'
elif rtconfig.PLATFORM in ['armcc']: # Keil AC5
    CXXFLAGS += ' --gnu --c99' # enable global C99 and GNU extension support for the whole project
    LOCAL_CCFLAGS += ' --gnu -g -W'
    LOCAL_CFLAGS += ' --c99' # cannot use --c99 symbol for C++ files, pertically in Keil
    LOCAL_CXXFLAGS += ' --cpp11' # support C++11
else:
    print('[RTduino] Unsupported rtconfig.PLATFORM: {}'.format(rtconfig.PLATFORM))
    Return('group')

core_src = Glob('*.c') + Glob('*.cpp') + Glob('avr/*.c')

if GetDepend(['RTDUINO_TINY_MODE']):
    SrcRemove(core_src, ['Tone.cpp', 'WInterrupts.c', 'wiring_analog.c', 'wiring_digital.c', 'wiring_pulse.c', 'wiring_shift.c'])

group = group + DefineGroup('RTduino-core', core_src,
                            depend = ['PKG_USING_RTDUINO'],
                            CPPPATH = [cwd],
                            CPPDEFINES = ['ARDUINO=10819', 'ARDUINO_ARCH_RTTHREAD=10000'],
                            CXXFLAGS = CXXFLAGS,
                            LOCAL_CCFLAGS = LOCAL_CCFLAGS,
                            LOCAL_CFLAGS = LOCAL_CFLAGS + core_cflags,
                            LOCAL_CXXFLAGS = LOCAL_CXXFLAGS + core_cxxflags)

if rtconfig.PLATFORM in ['gcc', 'armclang', 'llvm-arm']: # GCC or Keil AC6 or Clang/LLVM
    LOCAL_CXXFLAGS += ' -include RTduino.h' # #include <RTduino.h>

# add CFLAGS for arduino_main.cpp
if not GetDepend(['RTDUINO_NO_SETUP_LOOP']):
    group = group + DefineGroup('Applications', [], depend = ['PKG_USING_RTDUINO'], LOCAL_CXXFLAGS=LOCAL_CXXFLAGS, LOCAL_CFLAGS=LOCAL_CFLAGS)

# add CFLAGS for user libraries
group = group + DefineGroup('RTduino-libraries', [], depend = ['PKG_USING_RTDUINO'], LOCAL_CXXFLAGS=LOCAL_CXXFLAGS, LOCAL_CFLAGS=LOCAL_CFLAGS)

# add CFLAGS for user .ino sketches
group = group + DefineGroup('RTduino-sketches', [], depend = ['PKG_USING_RTDUINO'], LOCAL_CXXFLAGS=LOCAL_CXXFLAGS, LOCAL_CFLAGS=LOCAL_CFLAGS)

# add CFLAGS for demos
group = group + DefineGroup('RTduino-demos', [], depend = ['PKG_USING_RTDUINO'], LOCAL_CXXFLAGS=LOCAL_CXXFLAGS, LOCAL_CFLAGS=LOCAL_CFLAGS)

list = os.listdir(cwd)
for item in list:
    if os.path.isfile(os.path.join(cwd, item, 'SConscript')):
        group = group + SConscript(os.path.join(item, 'SConscript'))

Return('group')
